// quando due o piu oggetti sono derivati da una classe base comune,
// è possibile evitare che in un oggetto derivato da questi oggetti
// siano presenti piu copie della classe base
// dichiarando la classe base come virtual nel momento in cui
// viene ereditata

#include <iostream>
using namespace std;

class base
{
public:
int i;
};

class derivata1 : virtual public base
{
public:
int j;
};

class derivata2 : virtual public base
{
public:
int k;
};

class derivata3 :public derivata1, public derivata2 
{
public:
int somma;
};

int main()
{
derivata3 ob;
ob.i=10;
ob.j=20;
ob.k=30;
ob.somma=ob.i+ob.j+ob.k;
cout <<ob.somma<<endl;
return 0;
}

/*
60
Press any key to continue
*/
